package com.wx.leetcode;

import java.util.*;

/**
 * @desc: 给定一个字符串，请你找出其中不含有重复字符的 最长子串 的长度
 * <p>
 * 输入: "abcabcbb"
 * 输出: 3
 * 解释: 因为无重复字符的最长子串是 "abc"，所以其长度为 3。
 * @author: wx
 * @time: 2020/4/7 1:04 PM
 */
public class LengthOfLongestSubstringTopic {
    
    /**
     * 采用滑动窗口计算长度
     */
    public static int lengthOfLongestSubstring(String s) {
        if (s == null) {
            return 0;
        }

        int length = 0;
        int n = s.length();
        char[] chars = s.toCharArray();

        Map<Character, Integer> map = new HashMap<>();
        for (int start = 0, end = 0; end < n; end++) {
            char aChar = chars[end];

            Integer index = map.get(aChar);

            if (index != null) {
                start = Math.max(index, start);
            }

            length = Math.max(end - start + 1, length);
            map.put(aChar, end + 1);

        }
        return length;

    }

    public static void main(String args[]) {
        System.out.println(lengthOfLongestSubstring("abcabcbb"));
    }

}
